home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1999 #2
/
Amiga Plus CD - 1999 - No. 2.iso
/
System-Boost
/
Workbench
/
Archive
/
XPK
/
xpk_Source
/
test
/
testMemUnpack.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-11-15
|
2KB
|
99 lines
#define NAME "testMemUnpack"
#define DISTRIBUTION "(Freeware) "
#define REVISION "3"
#define SDI_ENDCODE_NOCTRLC
/* Programmheader
Name: testMemUnpack
Author: SDI
Distribution: Freeware
Description: tests Xpk Pack function
Compileropts: -
Linkeropts: -l xpkmaster amiga
1.1 06.12.96 : fixed for new includes, added new WriteXpkFib
1.2 15.04.97 : removed WriteXpkFib.c
1.3 28.11.97 : moved chunk-hook into include file
*/
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/xpkmaster.h>
#include <exec/memory.h>
#include "SDI_defines.h"
#include "chunkhook.c"
struct Library *XpkBase = 0;
ULONG DosVersion = 37;
STRPTR ibuf = 0,
obuf = 0;
ULONG ibuflen = 0,
obuflen = 0;
BPTR fh = 0;
struct RDArgs *rda = 0;
struct FileInfoBlock *fib = 0;
struct XpkFib *xfib = 0;
#define PARAM "FROM/A,TO"
void main(void)
{
UBYTE errbuf[XPKERRMSGSIZE+1];
ULONG olen;
struct {
STRPTR from;
STRPTR to;
} args = {0,0};
if(!(rda = ReadArgs(PARAM, (LONG *) &args, 0)) ||
!(xfib = (struct XpkFib *) AllocMem(sizeof(struct XpkFib), MEMF_ANY|MEMF_CLEAR)) ||
!(XpkBase = OpenLibrary(XPKNAME, 0)) ||
!(fh = Open(args.from, MODE_OLDFILE)) ||
!(fib = (struct FileInfoBlock *) AllocDosObject(DOS_FIB, 0)) ||
!(ExamineFH(fh, fib)) ||
!(ibuf = (STRPTR) AllocMem(fib->fib_Size, MEMF_ANY)) ||
Read(fh, ibuf, fib->fib_Size) != fib->fib_Size)
End(RETURN_FAIL);
ibuflen = fib->fib_Size;
Close(fh); fh = 0;
if(XpkExamineTags(xfib, XPK_InBuf, ibuf, XPK_InLen, ibuflen,
XPK_GetError, errbuf, TAG_DONE))
{
STRPTR a = errbuf;
VPrintf("Can't XpkExamine: %s\n", &a);
End(RETURN_FAIL);
}
if(XpkUnpackTags(XPK_InBuf, ibuf, XPK_InLen, ibuflen,
XPK_GetOutBuf, &obuf, XPK_GetOutBufLen, &obuflen,
XPK_GetOutLen, &olen, XPK_GetError, errbuf,
XPK_PassThru, 1, XPK_ChunkHook, &chunkhook, TAG_DONE))
{
STRPTR a = errbuf;
VPrintf("Can't XpkUnpack: %s\n", &a);
End(RETURN_FAIL);
}
if(args.to)
if(!(fh = Open(args.to, MODE_NEWFILE)) ||
Write(fh, obuf, olen) != olen)
End(RETURN_FAIL);
End(RETURN_OK);
}
void end(void)
{
if(fh) Close(fh);
if(xfib) FreeMem(xfib, sizeof(struct XpkFib));
if(XpkBase) CloseLibrary(XpkBase);
if(fib) FreeDosObject(DOS_FIB, fib);
if(rda) FreeArgs(rda);
if(ibuf) FreeMem(ibuf, ibuflen);
if(obuf) FreeMem(obuf, obuflen);
}